zamykani promennych ve vlaknech
Otázka od: abiturient@quick.cz
8. 7. 2004 7:16
ahoj delphisti,
zacinam pronikat do "vlaknoveho programovani" a narazil jsem na tenhle problem.
V dokumentaci jsem se docetl, ze je nutne promenne sdilene mezi vlakny
synchronizovat. Jedna z moznosti je zamykani kritickych sekci. Jedna z moznosti
zamykani je pouziti objektu TThreadList. A volani funkce LockList a pak
UnlockList s tim, ze se omezi pristup k objektum v listu, ktery vrati funkce
LockList. Pokud objekt (promenna) nebude v seznamu listu, ale bude v casti kodu
mezi volanimi LockList a UnLockList a jine vlakno se pokusi pristoupit k tomuto
objektu (promenne), bude tato promenna "chranena" pred pristupem jineho vlakna,
nez to prvni dokonci kritickou sekci a opusti ji (volanim UnLockList) ??
Nejak jsem nenasel vyklad toho co se vlastne deje "za oponou" pri volani
zamykaci a odemykaci funkce...
Moc prosim,
vedel by nekdo poradit ??
diky
nonsense
Odpovedá: Ludvik Vlcek
8. 7. 2004 7:39
abiturient@quick.cz napsal(a):
> ahoj delphisti,
>
> zacinam pronikat do "vlaknoveho programovani" a narazil jsem na tenhle
problem.
>
> V dokumentaci jsem se docetl, ze je nutne promenne sdilene mezi vlakny
synchronizovat.
Jedna z moznosti je zamykani kritickych sekci. Jedna z moznosti zamykani
je pouziti objektu TThreadList.
A volani funkce LockList a pak UnlockList s tim, ze se omezi pristup k
objektum v listu, ktery vrati funkce LockList.
Pokud objekt (promenna) nebude v seznamu listu, ale bude v casti kodu
mezi volanimi LockList a UnLockList a
jine vlakno se pokusi pristoupit k tomuto objektu (promenne), bude tato
promenna "chranena" pred pristupem
jineho vlakna, nez to prvni dokonci kritickou sekci a opusti ji (volanim
UnLockList) ??
>
> Nejak jsem nenasel vyklad toho co se vlastne deje "za oponou" pri volani
zamykaci a odemykaci funkce...
>
Podivej se do zdrojaku. Tusim, ze to je v:
....\Source\Rtl\Common\Cklasses.pas
Tam zjistis, ze takhle funkce vytvari promenou typu TRTLCriricalSection.
A k tomu uz je docela dost dokumentu, helpu celkem srozumitelne vysvetleno.
> Moc prosim,
> vedel by nekdo poradit ??
>
> diky
>
rado se stalo
L.V.
jezevec
Odpovedá: abiturient@quick.cz
8. 7. 2004 7:54
> > Nejak jsem nenasel vyklad toho co se vlastne deje "za oponou" pri
> volani zamykaci a odemykaci funkce...
> >
> Podivej se do zdrojaku. Tusim, ze to je v:
> ....\Source\Rtl\Common\Cklasses.pas
> Tam zjistis, ze takhle funkce vytvari promenou typu
> TRTLCriricalSection.
> A k tomu uz je docela dost dokumentu, helpu celkem srozumitelne
> vysvetleno.
Asi jsem natvrdlej, ale skoro nic...
Navic, nasel jsem jen popis (taky nic moc) pro objekt TCriticalSection
jeste jednou prosim o nasmerovani ....
diky
nonsense
Odpovedá: Daniel Rott
8. 7. 2004 8:05
> Asi jsem natvrdlej, ale skoro nic...
> Navic, nasel jsem jen popis (taky nic moc) pro objekt
> TCriticalSection
> jeste jednou prosim o nasmerovani ....
Lepsi je hledat primo u zdroje, jukni se do Platform SDK,
pokud ji nemas instalovanou (coz se divim), tak je i on-line:
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/dllproc/base/critical_section_objects.asp
Daniel
---------------------------------------------------------------
Scanning complete: NO intelligent life form in range.
Odpovedá: abiturient@quick.cz
8. 7. 2004 8:34
> > >
> > Podivej se do zdrojaku. Tusim, ze to je v:
> > ....\Source\Rtl\Common\Cklasses.pas
> > Tam zjistis, ze takhle funkce vytvari promenou typu
> > TRTLCriricalSection.
> > A k tomu uz je docela dost dokumentu, helpu celkem srozumitelne
> > vysvetleno.
>
> Asi jsem natvrdlej, ale skoro nic...
> Navic, nasel jsem jen popis (taky nic moc) pro objekt TCriticalSection
>
Tak jeste jednou ....
Datova strucktura TRTLCriticalSection (packed record) slouzi pro funkce
vytvarejici, rusici a pouzivajici kriticke sekve. To RTL "jen obaluje" volani
funkci z dll knihoven systemu, konkretne kernelu. TCriticalSection zase
"zabaluje" tyhle funce do objektu...
Viz zdrojove kody ....
Staci ???
godd luck
L.V.
jezevec